#include <stdio.h>
#include <stdlib.h>

// 队列定义
#define MAXSIZE 100
typedef int QElemType;
typedef struct
{
    QElemType *base; // 初始化的动态分配存储空间(base[MAXSIZE]一维数组)
    int front;       // 头指针，指向队列头元素
    int rear;        // 尾指针，指向队列尾元素的下一个位置
} SqQueue;
SqQueue Q;

// 循环队列的操作

// 队列的初始化
Status InitQueue(SqQueue &Q)
{
    Q.base = (QElemType *)malloc(MAXSIZE * sizeof(QElemType)); // 分配数组空间
    if (!Q.base)
        exit(OVERFLOW);
    Q.front = Q.base = 0; // 头尾指针置为0，队列为空
    return OK;
}

// 求队列长度
int QueueLength(SqQueue Q)
{
    return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}

// 入队
Status EnQueue(SqQueue &Q,QElemType e){
    if((Q.rear+1)%MAXSIZE == front) return ERROR;//先判断是否队满!
    Q.base[Q.rear] = e;//新元素加入队尾
    Q.rear = (Q.rear+1)%MAXSIZE;//队尾指针+1
}

// 出队
Status DeQueue(SqQueue &Q,QElemType &e){
    if(Q.front == Q.rear) return ERROR;//先判断是否队空
    e = Q.base[Q.front];//保存队头元素
    Q.frint = (Q.front+1)%MAXSIZE;// 队头指针+1
    return OK;
}
